﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;

namespace PresentacionEscritorio
{
    public partial class frmRegistrarCargo : Form, IOpcion
    {


        private GestorCargo GC = new GestorCargo();
        private string opElegida;
        public Cargo cargoSeleccionado { get; set; }

        public frmRegistrarCargo()
        {
            InitializeComponent();
        }
        //CARGAR FRM
        private void frmRegistrarCargo_Load(object sender, EventArgs e)
        {
            //FECHA DE BAJA
            lblFBCargo.Visible = false;
            dtFechaBaja.Visible = false;
            dtFechaBaja.Checked = false;
            lblDescripcionFechaBaja.Visible = false;
            //FECHA DE ALTA
            lblFACargo.Visible = true;
            dtFechaAlta.Visible = true;

            switch (opElegida)
            {
                case Opcion.OpRegistrar:
                    lblCaargo.Text = "Registrar Cargo";
                    btnAceptar.Text = "Registrar";
                    btnCancelar.Text = "Salir";
                    dtFechaAlta.Text = DateTime.Now.ToString();
                    break;

                case Opcion.OpConsultar:
                    lblCaargo.Text = "Consultar Cargo";
                    btnAceptar.Text = "Aceptar";
                    btnCancelar.Text = "Salir";
                    controlsPanelEnableFalse();
                    consultarCargo();
                    break;
                case Opcion.OpModificar:
                    lblCaargo.Text = "Modificar Cargo";
                    btnAceptar.Text = "Aceptar";
                    btnCancelar.Text = "Salir";
                    consultarCargo();
                    dtFechaAlta.Enabled = false;
                    //FALTA TRAER LA FECHA DE ALTA Y FECHA DE BAJA, NOMBRE DESCRIPCION


                    break;
                case Opcion.OpDarBaja:
                    lblCaargo.Text = "Baja Cargo";
                    btnAceptar.Text = "Aceptar";
                    btnCancelar.Text = "Salir";
                    lblDescripcionFechaBaja.Visible = true;
                    lblFBCargo.Visible = true;
                    dtFechaBaja.Visible = true;
                    dtFechaBaja.Checked = true;
                    controlsPanelEnableFalse();
                    consultarCargo();

                    break;
                default:
                    break;
            }
        }
        //VALIDAMOS DATOS
        private bool validar()
        {
            bool validacion = true;
            string error = "";

            if (string.IsNullOrEmpty(txtNombre.Text))
            {
                validacion = false;
                error += "El nombre del cargo debe ingresarse \r\n";
            }
            else
            {//Falta controlar que no se ingrese un numero
                if (opElegida != "UPD")
                {
                    if (GC.verificarExistencia(txtNombre.Text))
                    {
                        validacion = false;
                        error += "El cargo del cargo ya existe registrado \r\n";
                    }
                }

            }

            if (error != "")
            {
                MessageBox.Show(error, "Aviso", MessageBoxButtons.OK);
            }

            return validacion;
        }
        //PANEL ENABLE
        private void controlsPanelEnableFalse()
        {
            foreach (Control item in panelCargo.Controls)
            {
                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = true;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = false;
                }
            }

        }
        //ACEPTAR Y CANCELAR SOLICITUD
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            DialogResult r;
            switch (opElegida)
            {
                case Opcion.OpRegistrar:
                    r = MessageBox.Show("¿Desea registrar el nuevo cargo?", "Registrar", MessageBoxButtons.YesNo);
                    if (r == DialogResult.Yes)
                    {
                        registrarCargo();
                    }
                    break;
                case Opcion.OpConsultar:
                    this.Dispose();
                    break;
                case Opcion.OpModificar:
                    r = MessageBox.Show("¿Desea modificar los datos del Cargo?", "Registrar", MessageBoxButtons.YesNo);
                    if (r == DialogResult.Yes)
                    {
                        modificarCargo();
                    }
                    break;
                case Opcion.OpDarBaja:
                    r = MessageBox.Show("¿Desea dar de baja el Cargo seleccionado en la fecha " + DateTime.Now.ToString("dd/MM/yyyy") + "?", "Registrar", MessageBoxButtons.YesNo);
                    if (r == DialogResult.Yes)
                    {
                        registrarBajaCargo();
                    }
                    break;
                default:
                    break;
            }


        }
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        //REGISTRAR MODIFICAR CONSULTAR
        private void registrarCargo()
        {
            if (validar())
            {
                try
                {
                    Cargo oC = new Cargo();
                    oC.nombre = txtNombre.Text;
                    oC.fechaAlta = DateTime.Now;
                    oC.descripcion = txtDescripcion.Text;
                    if (GC.registrarCargo(oC))
                    {
                        MessageBox.Show("Se registró con exito el cargo:" + oC.nombre, "Aviso", MessageBoxButtons.OK);
                    }
                }
                catch (Exception Ex)
                {

                    throw new Exception(Ex.Message);
                }


            }
        }
        private void modificarCargo()
        {

            if (validar())
            {
                try
                {
                    Cargo oC = new Cargo();
                    oC.idCargo = cargoSeleccionado.idCargo;
                    oC.nombre = txtNombre.Text;
                    oC.fechaAlta = DateTime.Now;
                    oC.descripcion = txtDescripcion.Text;
                    if (GC.modificarCargo(oC))
                    {
                        MessageBox.Show("Se modificó con éxito el cargo: " + oC.nombre, "Modificar", MessageBoxButtons.OK);
                    }

                }
                catch (Exception Ex)
                {

                    throw new Exception(Ex.Message);
                }
            }


        }
        private void consultarCargo()
        {
            txtNombre.Text = cargoSeleccionado.nombre;
            txtDescripcion.Text = cargoSeleccionado.descripcion;
            dtFechaAlta.Text = cargoSeleccionado.fechaAlta.ToString();
            if (cargoSeleccionado.fechaBaja != null)
            {
                dtFechaBaja.Text = cargoSeleccionado.fechaBaja.ToString();
                lblFBCargo.Visible = true;
                dtFechaBaja.Visible = true;
            }


        }
        private void registrarBajaCargo()
        {
            try
            {
                Cargo oC = new Cargo();
                oC.idCargo = cargoSeleccionado.idCargo;
                oC.fechaBaja = DateTime.Parse(dtFechaBaja.Text);
                if (GC.registrarBajaCargo(oC))
                {
                    MessageBox.Show("Se registró con exito la baja del cargo:" + oC.nombre, "Baja", MessageBoxButtons.OK);
                }
            }
            catch (Exception Ex)
            {

                throw new Exception(Ex.Message);
            }
        }
        private void limpiar() 
        {
            txtDescripcion.Text = "";
            txtNombre.Text = "";
    
        }

        //INTEFAZ SET,GET OPTION
        public void setOpcion(string op)
        {
            opElegida = op;
        }

        public string getOpcion()
        {
            return opElegida;
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }
    }
}
